package info.pandd.centrumDowodzeniaSMS;

import info.pandd.centrumDowodzeniaSMS.SMSHistoryProviderMetaData.SMSTableMetaData;

import java.util.ArrayList;
import java.util.Iterator;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class CentrumDowodzeniaSMSActivity extends Activity {	
	public ArrayList<String> kontaktyNazwy = new ArrayList<String>();
	public ArrayList<String> kontaktyNumery = new ArrayList<String>();
	public ArrayList<String> zaznaczoneKontaktyNaLiscie = new ArrayList<String>();
	public SmsManager managier = SmsManager.getDefault();
	
	public EditText wybraneKontakty;
	public EditText wiadomosc;
	
	private ArrayList<String> trescWiadomosci = new ArrayList<String>();
	private String tekstWiadomosci;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        wybraneKontakty = (EditText) findViewById(R.id.receivers);
        wiadomosc = (EditText) findViewById(R.id.messageText);
        tekstWiadomosci = wiadomosc.getText().toString();
        Button pokazKontakty = (Button)findViewById(R.id.kontakty);
        
        pokazKontakty.setOnClickListener(new View.OnClickListener() {
        	
			@Override
			public void onClick(View v) {
				Intent otworzKontakty = new Intent(getApplicationContext(), ListaKontaktowActivity.class);
				otworzKontakty.putExtra("selectedIds", zaznaczoneKontaktyNaLiscie);
				startActivityForResult(otworzKontakty, 1);
			}
		});
        
        wiadomosc.addTextChangedListener(new TextWatcher() {
			
			@Override
			public void onTextChanged(CharSequence s, int start, int before, int count){
				tekstWiadomosci = wiadomosc.getText().toString();
				trescWiadomosci = managier.divideMessage(tekstWiadomosci);
				TextView ileSMS = (TextView) findViewById(R.id.liczbaSmsNaWiadomosc);
				ileSMS.setText(""+trescWiadomosci.size());
				TextView ileSSMRazem = (TextView) findViewById(R.id.liczbaSmsOgolem);
				ileSSMRazem.setText(""+(trescWiadomosci.size()*kontaktyNazwy.size()));
			}
			
			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
				// metoda wymagana do implementacji interfejsu, nieużywana
				
			}
			
			@Override
			public void afterTextChanged(Editable s) {
				// metoda wymagana do implementacji interfejsu, nieużywana
				
			}
		});
        
        wybraneKontakty.setOnFocusChangeListener(new View.OnFocusChangeListener() {
			
			@Override
			public void onFocusChange(View arg0, boolean hasFocus) {
				if(hasFocus){
					Toast msg = Toast.makeText(getApplicationContext(), "Pole służy jedynie do wyświetlania wybranych kontaktów.\nAby zmienić odbiorców skorzystaj z przycisku Kontakty.", Toast.LENGTH_LONG);
					msg.show();
				}
			}
		});
        
        Button sendSMS = (Button) findViewById(R.id.sendMessage);
        sendSMS.setEnabled(false);
        sendSMS.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				Iterator<String> numery = kontaktyNumery.iterator();
				Iterator<String> nazwy = kontaktyNazwy.iterator();
				if(tekstWiadomosci.length() != 0){
					ContentValues values = new ContentValues();
					values.put(SMSTableMetaData.MSG_TEXT, tekstWiadomosci);
					ContentResolver cr = getContentResolver();
					Toast msg;
					String toastMsg = "";
					int ileWyslanych = 0;
					//jedziemy z wysyłką wiadomości i zapisem do bazy danych
					while(numery.hasNext() && nazwy.hasNext()){
						String nr = numery.next();
						String odbiorca = nazwy.next();
						try {
							sendSMSMessage(nr, trescWiadomosci);
							if(kontaktyNumery.size() == 1){
								toastMsg = "Wiadomość została wysłana do odbiorcy " + odbiorca;
								ileWyslanych = 1;
							}
							else{
								ileWyslanych++;
							}
							values.put(SMSTableMetaData.MSG_RECEIVER_NAME, odbiorca);
							values.put(SMSTableMetaData.MSG_RECEIVER_NUMBER, nr);
							cr.insert(SMSTableMetaData.CONTENT_URI, values);
						} catch (Exception e) {
							msg = Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG);
							msg.show();
						}
					}
					if(kontaktyNumery.size() != 1){
						toastMsg = "Wiadomość została wysłana do " + ileWyslanych + " z " + kontaktyNumery.size() + " odbiorców.";
					}
					msg = Toast.makeText(getApplicationContext(), toastMsg, Toast.LENGTH_LONG);
					msg.show();
					wiadomosc.setText("");
				}//eof czy wiadomosc pusta?
				else{
					Toast msg = Toast.makeText(getApplicationContext(), "Wpisz treść wiadomości!", Toast.LENGTH_SHORT);
					msg.show();
				}
			}//eof onClick()
		});
    }//eof onCreate()
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_glowne, menu);
        return true;
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item){
    	if(item.getItemId() == R.id.menu_history){
    		Intent pokazHistorie = new Intent(getApplicationContext(), HistoriaSMSActivity.class);
			startActivity(pokazHistorie);
    	}
    	else if(item.getItemId() == R.id.menu_about){
    		Alerts.showAlert("Centrum Dyspozycji SMS \n" +
    						 "© 2012 " +
    						 "by pasqal & dziu8us \n" +
    						 "\n" +
    						 "Aplikacja darmowa do użytku niekomercyjnego, bez licencji, za to ze wskazaniem na 5.", this);
    	}
    	else if(item.getItemId() == R.id.menu_exit){
    		finish();
    	}
    	
    	return true;
    }
    
    protected void onActivityResult(int requestCode, int resultCode, Intent outputIntent){
    	Button wyslij = (Button) findViewById(R.id.sendMessage);
    	Toast msg;
    	if(resultCode == Activity.RESULT_OK){
	    	kontaktyNazwy = outputIntent.getStringArrayListExtra("contactNames");
	    	kontaktyNumery = outputIntent.getStringArrayListExtra("contactNumbers");
	    	zaznaczoneKontaktyNaLiscie = outputIntent.getStringArrayListExtra("selectedIds");
	    	//przetwarzanie kontaktów do wyświetlenia na liście
	    	
	    	if(kontaktyNazwy.size() > 0){
	    		msg = Toast.makeText(getApplicationContext(), "Wybrana liczba odbiorców: " + kontaktyNazwy.size(), Toast.LENGTH_SHORT);
		    	msg.show();
		    	//przepisywanie kontaktów do pola tekstowego
		    	String wybraneNumery = "";
		    	Iterator<String> itNazw = kontaktyNazwy.iterator();
		    	Iterator<String> itNumerow = kontaktyNumery.iterator();
		    	String tmpName, tmpNumber;
		    	while(itNazw.hasNext() && itNumerow.hasNext()){
		    		tmpName = itNazw.next();
		    		tmpNumber = itNumerow.next();
		    		wybraneNumery += tmpName + "(" + tmpNumber +")";
		    		if(itNazw.hasNext()) wybraneNumery += ", ";
		    	}
		    	//aktywowanie przycisku, jeśli liczba odbiorców > 0
		    	wybraneKontakty.setText(wybraneNumery);
	    		wyslij.setEnabled(true);
	    	}
	    	else{
	    		msg = Toast.makeText(getApplicationContext(), "Nie wybrano żadnego kontaktu!", Toast.LENGTH_SHORT);
	    		msg.show();
	    		kontaktyNazwy.clear();
	    		kontaktyNumery.clear();
	    		zaznaczoneKontaktyNaLiscie.clear();
	    		wybraneKontakty.setText("");
	    		wyslij.setEnabled(false);
	    	}
    	}
    	else{
    		if(kontaktyNazwy.size() == kontaktyNumery.size() && kontaktyNazwy.size() == zaznaczoneKontaktyNaLiscie.size()){
    		msg = Toast.makeText(getApplicationContext(), "Zmiany w wybranych kontaktach nie zostały wprowadzone.", Toast.LENGTH_SHORT);
	    	msg.show();
    		}
    	}
    	TextView ileSSMRazem = (TextView) findViewById(R.id.liczbaSmsOgolem);
		ileSSMRazem.setText(""+(trescWiadomosci.size()*kontaktyNazwy.size()));
    }
    
    private void sendSMSMessage(String numer, ArrayList<String> czesciWiadomosci) throws Exception{
    	managier.sendMultipartTextMessage(numer, null, czesciWiadomosci, null, null);
    }
}